package com.itaming.lycheeframework.mybatisplus.properties;

import com.baomidou.mybatisplus.annotation.DbType;
import com.itaming.lycheeframework.common.constant.FrameworkConstant;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

/**
 * MybatisPlus配置参数
 *
 * @author A.Ming
 */
@ConfigurationProperties(LycheeMybatisPlusProperties.PREFIX)
@Data
public class LycheeMybatisPlusProperties {

    /**
     * 前缀
     */
    public static final String PREFIX = FrameworkConstant.PROPERTIES_ROOT_NAME + ".mybatis-plus";

    /**
     * 分页配置
     */
    @NestedConfigurationProperty
    private Pagination pagination = new Pagination();

    /**
     * 分页配置
     * <p>
     * 参考：<a href="https://www.baomidou.com/plugins/pagination/">官方文档</a>
     */
    @Data
    public static class Pagination {

        /**
         * 溢出总页数后是否进行处理
         */
        private boolean overflow = false;

        /**
         * 单页分页条数限制
         */
        private Long maxLimit = 500L;

        /**
         * 数据库类型
         * <p>
         * 官方建议：单一数据库类型的均设置<code>dbType</code>
         */
        private DbType dbType;

        /**
         * 优化生成<code>countSql</code>时的<code>join</code>
         * <p>
         * 官方：生成 countSql 时，如果 left join 的表不参与 where 条件，会将其优化掉。
         * 建议在任何带有 left join 的 SQL 中，都给表和字段加上别名。
         * <p>
         * 在某些情况下可能会引发 COUNT 不准确的问题，默认关闭
         */
        private boolean optimizeJoin = false;

    }

}
